package cn.wl.pchart.tools;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import java.util.concurrent.*;

// 核心操作类
public class OperatorCore {

    // 操作方法
    public static JSONObject handle(String rawData, OperatorCallback back) {
        try {
            // AES解密字符串数据
            rawData = Tools.aesDecrypt(rawData);
            // System.out.println("获取到数据：" + rawData);
        }catch (Exception e) {
            System.out.println("字符串解密失败！");
            e.printStackTrace();
            back.getReturnJson().put("code", -1);
            back.getReturnJson().put("msg", "字符串解密失败！请确认数据已按照约定加密！");
        }
        try {
            // 初始化
            back.init();
            // 获取解密后的JSON对象
            back.setRawJson(JSONObject.parseObject(rawData));
        } catch (Exception e) {
            System.out.println("字符串转换JSON对象失败！");
            e.printStackTrace();
            back.getReturnJson().put("code", -2);
            back.getReturnJson().put("msg", "字符串转换JSON对象失败！请检查JSON字符串格式！");
        }

        System.out.println("获取的内容：" + back.getRawJson());

        // 线程池
        ExecutorService exec = Executors.newSingleThreadExecutor();
        // Future可以认为是Callable的管理类
        Future<String> results = exec.submit(back);

        // 存储已经处理完毕的数据
        String processedData = null;
        // 存储要返回的JSON对象
        JSONObject returnJson = new JSONObject();
        // 存储临时数据的JSON对象
        JSONObject tempJson = new JSONObject();

        try {
            //results.get() 为阻塞方法，获取的是callable中的call方法的return值，返回值类型为String
            processedData = results.get();
        } catch (Exception e) {
            System.out.println("获取线程数据中出现异常！");
            e.printStackTrace();
            tempJson.put("code", -3);
            tempJson.put("msg", "获取线程数据中出现异常！");
            returnJson.put("data", Tools.aesEncrypt(tempJson.toString()));
            return returnJson;
        }

//        try {
//            // 将获取的字符串转位为JSON对象
//            returnJson = JSONObject.parseObject(processedData);
//        } catch (Exception e) {
//            tempJson.put("code", -4);
//            tempJson.put("msg", "线程数据转JSON对象中出现异常！");
//            returnJson.put("data", Tools.aesEncrypt(tempJson.toString()));
//            return returnJson;
//        }

        System.out.println("返回的内容：" + processedData);

        returnJson.put("data", Tools.aesEncrypt(processedData));
        return returnJson;

    }

}
